package com.gxp.system.service.impl;

import com.gxp.common.core.text.Convert;
import com.gxp.common.utils.file.PDFUtils;
import com.gxp.system.domain.ZkNmrFile;
import com.gxp.system.domain.ZknjServiceInstance;
import com.gxp.system.mapper.ZkNmrFileMapper;
import com.gxp.system.service.IZkNmrFileService;
import com.gxp.system.service.IZknjServiceInstanceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 文件Service业务层处理
 * 
 * @author zh
 * @date 2024-03-25
 */
@Service
public class ZkNmrFileServiceImpl implements IZkNmrFileService 
{
    @Autowired
    private ZkNmrFileMapper zkNmrFileMapper;
    @Autowired
    private IZknjServiceInstanceService aServiceService;



    /**
     * 查询文件
     * 
     * @param fileId 文件主键
     * @return 文件
     */
    @Override
    public ZkNmrFile selectZkNmrFileByFileId(Long fileId)
    {
        return zkNmrFileMapper.selectZkNmrFileByFileId(fileId);
    }

    /**
     * 查询文件列表
     * 
     * @param zkNmrFile 文件
     * @return 文件
     */
    @Override
    public List<ZkNmrFile> selectZkNmrFileList(ZkNmrFile zkNmrFile)
    {
        return zkNmrFileMapper.selectZkNmrFileList(zkNmrFile);
    }

    /**
     * 新增文件
     * 
     * @param zkNmrFile 文件
     * @return 结果
     */
    @Override
    public int insertZkNmrFile(ZkNmrFile zkNmrFile)
    {
        return zkNmrFileMapper.insertZkNmrFile(zkNmrFile);
    }

    /**
     * 修改文件
     * 
     * @param zkNmrFile 文件
     * @return 结果
     */
    @Override
    public int updateZkNmrFile(ZkNmrFile zkNmrFile)
    {
        return zkNmrFileMapper.updateZkNmrFile(zkNmrFile);
    }

    /**
     * 批量删除文件
     * 
     * @param fileIds 需要删除的文件主键
     * @return 结果
     */
    @Override
    public int deleteZkNmrFileByFileIds(String fileIds)
    {
        return zkNmrFileMapper.deleteZkNmrFileByFileIds(Convert.toStrArray(fileIds));
    }

    /**
     * 删除文件信息
     * 
     * @param fileId 文件主键
     * @return 结果
     */
    @Override
    public int deleteZkNmrFileByFileId(Long fileId)
    {
        return zkNmrFileMapper.deleteZkNmrFileByFileId(fileId);
    }

    /**
     * 保存文件结果
     * @param serviceId
     * @param nmrFile
     * @return
     */
    @Override
    public int updateNmrFile(Long serviceId, ZkNmrFile nmrFile) {
        return zkNmrFileMapper.insertZkNmrFile(nmrFile);
    }

    /**
     * 根据实验id查询文件
     * @param infId
     * @return
     */
    @Override
    public List<ZkNmrFile> selectNmrFileByInfId(Long infId) {
        List<ZkNmrFile> nmrFiles = new ArrayList<>();
        ZknjServiceInstance serviceInstance = aServiceService.selectByInfId(infId);
        if(serviceInstance == null){
            return nmrFiles;
        }
        nmrFiles.add(serviceInstance.getNmrFile());
        String anaNmrfileIds = serviceInstance.getAnaNmrfileIds();
        if(anaNmrfileIds != null && !anaNmrfileIds.isEmpty()){
            String[] ids = anaNmrfileIds.split(",");
            for(String id : ids){
                ZkNmrFile nmrFile = zkNmrFileMapper.selectZkNmrFileByFileId(Long.valueOf(id));
                if(nmrFile != null){
                    nmrFiles.add(nmrFile);
                }
            }
        }
        return nmrFiles;
    }

    /**
     * 添加评论到PDF文件
     * @param reportfileIds
     * @param approveComment
     * @return
     */
    @Override
    public boolean addCommentToPdf(String reportfileIds, String approveComment) {
        if (reportfileIds != null && !reportfileIds.isEmpty()) {
//            String[] fileIds = reportfileIds.split(",");
            ZkNmrFile zkNmrFile = zkNmrFileMapper.selectZkNmrFileByFileId(Long.valueOf(reportfileIds));
            if (zkNmrFile != null && zkNmrFile.getFileName().endsWith("pdf")) {
                // 添加评论到PDF文件
                try {

                    PDFUtils.AddComment(zkNmrFile.getFilePathGxp(), null, approveComment);
                } catch (Exception e) {
                    e.printStackTrace();
                    return false; // 如果添加评论失败，返回false
                }
            }
            return true;
        }
        return false;
    }
}
